import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Geo, Pie, Tab, Timeline

# 读取数据
df_2 = pd.read_excel('C:/Users/DELL/Desktop/课程/数据清洗期末实训/实训资料/data/服饰行业粉丝地域分布.xlsx')

# 获取所有行业名称
industry_names = df_2['行业名称'].unique()

# 创建地图时间线
geo_timeline = Timeline()
for industry_name in industry_names:
    # 筛选特定行业的数据
    industry_data = df_2[df_2['行业名称'] == industry_name]

    # 提取省份和占比数据
    provinces = industry_data['省份'].tolist()
    percentages = industry_data['占比'].tolist()
    data = [list(z) for z in zip(provinces, percentages)]

    # 创建地图
    geo = (
        Geo()
        .add_schema(maptype='china')
        .add('各省用户百分比', data)
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(
            title_opts=opts.TitleOpts(title=f"服饰行业粉丝地域分布 - 各省用户百分比 ({industry_name})"),
            visualmap_opts=opts.VisualMapOpts(
                max_=max(percentages),  # 根据实际数据的最大值调整
                min_=min(percentages),  # 根据实际数据的最小值调整
                is_piecewise=True,  # 是否为分段型
                pieces=[
                    {"min": 0, "max": 2, "label": "0-2%", "color": "#FFE4E1"},
                    {"min": 2, "max": 4, "label": "2-4%", "color": "#FFC0CB"},
                    {"min": 4, "max": 6, "label": "4-6%", "color": "#FFB6C1"},
                    {"min": 6, "max": 8, "label": "6-8%", "color": "#FF69B4"},
                    {"min": 8, "max": 10, "label": "8-10%", "color": "#FF1493"},
                    {"min": 10, "max": 20, "label": "10%-20%", "color": "#C71585"},
                ],
            )
        )
    )
    geo_timeline.add(geo, industry_name)

# 设置地图时间线配置
geo_timeline.add_schema(
    play_interval=10000,  # 播放间隔，单位毫秒
    is_auto_play=True,  # 是否自动播放
    is_loop_play=True  # 是否循环播放
)

# 创建饼图时间线
pie_timeline = Timeline()
for industry_name in industry_names:
    # 筛选特定行业的数据
    industry_data = df_2[df_2['行业名称'] == industry_name]

    # 提取省份和占比数据
    provinces = industry_data['省份'].tolist()
    percentages = industry_data['占比'].tolist()
    data = [list(z) for z in zip(provinces, percentages)]

    # 创建饼图
    pie = (
        Pie()
        .add("", data)
        .set_global_opts(
            title_opts=opts.TitleOpts(title=f"各省粉丝占比扇形图 ({industry_name})"),
            legend_opts=opts.LegendOpts(pos_left='20%')
        )
        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}%"))
    )
    pie_timeline.add(pie, industry_name)

# 设置饼图时间线配置
pie_timeline.add_schema(
    play_interval=10000,  # 播放间隔，单位毫秒
    is_auto_play=True,  # 是否自动播放
    is_loop_play=True  # 是否循环播放
)

# 使用Tab组件添加选项卡
tab = Tab()
tab.add(geo_timeline, "地理分布图")
tab.add(pie_timeline, "扇形图")

# 渲染图表
tab.render('地图和饼图.html')
